#include <linux/fs.h>  
#include <linux/sched.h>  
#include <sys/stat.h>  
#include <fcntl.h>  
#include <sys/types.h>  
#include <unistd.h>  
#include <string.h> 
#include <stdarg.h>
#include <asm/segment.h>
#include <linux/kernel.h>
struct task_struct *t;
int i,j,k,x; 

int sprintf(char *buf, const char *fmt, ...)
{
	va_list args; int i;
	va_start(args, fmt);
	i=vsprintf(buf, fmt, args);
	va_end(args);
	return i;
}

int ps_read(int dev,char * buf,int count,off_t * f_pos)
{
	k=0;
	char *psbuf=malloc(sizeof(char)*1024);
	j=sprintf(psbuf,"pid\tstate\tfather\tcounter\tstart_time\n");
	for(i=0;i<64;i++)
	{
		t=task[i];
		if(t)
		{
			k=sprintf(psbuf+j,"%d\t%d\t%d\t%d\t%d\n",t->pid,t->state,t->father,t->counter,t->start_time);
			j=j+k;
		}
	}
   	 for(x=0;x<count;x++)  
    	{   
        	put_fs_byte(psbuf[x+(*f_pos)],buf+x+(*f_pos));
		if(x+(*f_pos)>=j)
		{
			(*f_pos) = (*f_pos)+x;   
			break;     
		}
    	}  
    	return x;  
}




